package offerbook;

/**
 * 判断一个数是否是2的正数次幂。
 *
 * @date 2020/3/8 15:58
 */
public class Code10_IsPowerOf2 {
    /**
     * 方式1：利用 n & (n-1)是将最低位1置为0
     */
    public static boolean isPowerOf2_1(int n){
        if(n <= 0) return false;
        //如果是2的正数次幂，就只有1个bit位为1
        return (n & (n - 1)) == 0;
    }

    /**
     * 方式2：netty源码
     *
     * n & -n 是 拿出n的最低位的1
     */
    public static boolean isPowerOf2_2(int n){
        if(n <= 0) return false;
        //自己画示意图
        return (n & -n) == n;
    }

    public static void main(String[] args) {
        int n = 12;
        for (int i = 0; i < 10000; i++) {
            assert i % 2 != 1 || (i & -i) == 1;
        }
        System.out.println(n & -n);
    }
}
